package com.hrt.day04.implicitdemo

/**
 * 隐式参数和隐式值
 */
object Implicit5 {
    implicit val aa = 100
//    implicit val bb: Double = 200
    
    def main(args: Array[String]): Unit = {
        //        foo(10, 100)
        //        foo
        
        // foo(2)

        /**
         * 隐式值和默认值的变化方式
         */
        foo  // 先隐式值, 没有了再去默认值
        foo()  // 默认值
    }
    
    def foo(implicit a: Int = 10) = {
        println(a)
    }
    
    
    /*def foo(a: Int)(implicit b: Int, c: Double) = {
        println(a + b + c)
    }*/
    
    /*// a就是隐式参数
    def foo(implicit a: Int, b: Double) = {
        println(a)
    }*/
}

/**
隐式转换
    隐式参数和隐式值
        隐式参数是指的给函数的参数添加隐式关键字
        implicit val aa = 100
        def foo(implicit a: Int)
        当调用函数的时候, 如果不传参数, 并且省略括号, 就会找隐式值!(只看类型,不看名字)

        如果定义了隐式参数, 则整个参数列表中所有的参数都是隐式参数,使用柯理化来避免都是隐式参数
 */
